/*
 * CloseWindowListener.java
 * Copyright (C) 2007 Ezequiel Turovetzky
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
package ar.com.botonera.gui.common.listeners;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import ar.com.botonera.Application;
import ar.com.botonera.config.BotoneraManager;
import ar.com.botonera.gui.common.ImageLoader;
import ar.com.botonera.gui.menu.contextual.ContextualMenu;
import ar.com.botonera.gui.systray.BotoneraTray;

import com.nitido.utils.toaster.Toaster;

/**
 * Simple <code>WindowAdapter</code> utilizado para habilitar
 * y deshabilitar los items del men&uacute; contextual del &aacute;rea
 * de notificaci&oacute;n al cerrar la ventana con el bot&oacute;n <code>x</code>,
 * situado en el extremo superior derecho de las ventanas.
 * @author <a href="mailto:tezequiel@gmail.com">Ezequiel Turovetzky</a>
 * @version 1.0
 */
public class BotoneraWindowAdapter extends WindowAdapter {

    //~ Instance fields --------------------------------------------------------

    /** Informa si es la primera vez que se cierra la ventana */
    private boolean firstClosing;

    //~ Constructors -----------------------------------------------------------

    /**
     * Crea una nueva instancia de esta clase.
     */
    public BotoneraWindowAdapter() {
        firstClosing = true;
    }

    //~ Methods ----------------------------------------------------------------

    /**
     * Especifica las acciones a realizarse cuando el usuario cierra la ventana.
     * <ol>
     * <li>El item <code>Mostrar</code> del men&uacute; del &aacute;rea de notificaci&oacute;n
     *     se pone en <i>habilitado</i></li>
     * <li>El item <code>Ocultar</code> del men&uacute; del &aacute;rea de notificaci&oacute;n 
     *     se pone en <i>deshabilitado</i></li>
     * <li>Se esconde el men&uacute; contextual, en caso que est&eacute; visible</li>
     * <li>Si es la primera vez que se cierra la ventana, se muestra un di&aacute;logo avisando 
     *     que la ventana se situar&aacute; en el &aacute;rea de notificaci&oacute;n</li>
     * </ol>
     */
    @Override
    public void windowClosing(WindowEvent e) {

        BotoneraTray tray = Application.getInstance().getTray();

        tray.getPopupMenu().getHideItem().setEnabled(false);
        tray.getPopupMenu().getShowItem().setEnabled(true);
        
        hideContextualMenu();

        if(firstClosing) {
            firstClosing = false;

            BotoneraManager bm = BotoneraManager.getInstance();
            
            String message = bm.get("ar.com.botonera.close.info.message");
            
            Toaster toaster = new Toaster();
            toaster.showToaster(ImageLoader.loadIcon("images/botonera.png"), message);
        }
    }

    /**
     * Especifica las acciones a realizarse cuando el usuario minimiza la ventana.
     * <ol>
	 * <li>Se esconde el men&uacute; contextual, en caso que est&eacute; visible</li>
     * </ol>
     */
	@Override
	public void windowDeactivated(WindowEvent e) {
		hideContextualMenu();
	}
	
	/**
	 * Esconde el menu contextual, en caso que estuviera visible,
	 * para que no quede colgado en la pantalla.
	 */
	private void hideContextualMenu() {
        ContextualMenu menu = Application.getInstance().getWindow().getBotonera().getContextualMenu(); 
        if(menu != null && menu.isVisible()) {
        	menu.setVisible(false);
        }		
	}
}
